//
//  assignment_operator.hpp
//  learnC++
//
//  Created by liuzhibing on 2018/6/7.
//  Copyright © 2018年 yunfan.com. All rights reserved.
//

#ifndef assignment_operator_hpp
#define assignment_operator_hpp

#include <stdio.h>
#include <iostream>

class MyString2 {
private:
    char *m_data;
    int m_length;
    
public:
//    复制构造函数和赋值运算符的用途几乎相同 - 都将一个对象复制到另一个对象。但是，复制构造函数初始化新对象，而赋值运算符替换现有对象的内容。
//    如果在复制发生之前必须创建新对象，则使用复制构造函数（注意：这包括按值传递或返回对象）。
//    如果在复制发生之前不必
    MyString2(const char*data = "",int length = 0):m_length(length){
        if (!length) {
            m_data = nullptr;
        }else{
            m_data = new char[length];
        }
        
        for (int i = 0; i < length; ++i) {
            m_data[i] = data[i];
        }
    }
    //overload assignment
    
    //delete表示删除某个方法，一般用于复制构造函数，赋值对象等方法，外界就无法调用
//    MyString2 &operator=(const MyString2 &str) = delete;
    MyString2 &operator=(const MyString2 &str);
    
    friend std::ostream& operator<<(std::ostream& out, const MyString2 &s);
};

/*
 
 MyString2 alex("alex",5);
 
 MyString2 employ;
 employ = alex;
 std::cout << employ;
 
 */


#endif /* assignment_operator_hpp */
